[Registry Easy 4.0]
[www.registryeasy.com]

function Random_Serial(PLen: Integer): string;
var char: string;
begin
  Randomize;
  char    := '1234657890';
  Result  := '';
  repeat
    Result := Result + Char[Random(Length(Char)) + 1];
  until (Length(Result) = PLen)
end;

function Generate_Serial : string;
var r1,{r2,}r3,r4,R_Total,n1,n2,n3,r_g,r_g2,r_g3,Part1,Part2,MD5_H,Final_Serial: string;
    i,j: integer;
begin
  result := 'Error : contact impostor_76171@yahoo.com';
  r1 := Random_Serial(4);
  //r2 := Random_Serial(4);//we dont need it !
  r3 := Random_Serial(4);
  r4 := Random_Serial(4);
  n1:='ec7235e71546232da9f7cc02f32c9d0e';

  r_g := copy(r1,0,1);//get the firs char of random serial1 (r1)
  for i := strtoint(r_g)+1 to length(n1) do n2 := n2 + (n1[i]);
  n2 := copy(n2,0,10);
  r_g2 := copy(r1,3,1);
  R_Total := (r3+r4) + (n2) + (r_g2);

  MD5_H := StrMD5(R_Total);

  r_g3 := copy(r1,2,1);
  for j := strtoint(r_g3)+1 to length(MD5_H) do n3 := n3 + (MD5_H[j]);
  n3 := copy(n3,0,5);

  Part1 := copy(r1,0,3) + copy(n3,0,1);
  Part2 := copy(n3,2,4);
  Final_Serial := Part1 + '-' + Part2 + '-' + r3 + '-' + r4;

  Result := Final_Serial;
end;